import legendarySeaCreatureSettings from "./legendarySeaCreatureSettings";
import MiniGamesSettings from "./MiniGamesSettings";
import eventSettings from "./eventSettings";
import QuickCommandSettings from "./QuickCommandSettings";
import AttributeHighlightSettings from "./AttributeHighlightSettings";
import {
    @ButtonProperty,
    @CheckboxProperty,
    Color,
    @ColorProperty,
    @PercentSliderProperty,
    @SelectorProperty,
    @SwitchProperty,
	@SliderProperty,
    @TextProperty,
    @Vigilant,
    @NumberProperty,
} from './vigilance';


@Vigilant("config", `§6§lBabyzombieAddons§r§e ${JSON.parse(FileLib.read("BabyzombieAddons", "metadata.json")).version}`, {
    getCategoryComparator: () => (a, b) => {
        const categories = ['General','Dungeon','Kuudra','Auto Requeue','Slayer','Withercloak','Mining','Fishing','Garden','Quick Command','AutoIS','Misc','Event','Mini Games']
        return categories.indexOf(a.name) - categories.indexOf(b.name)
    }
})

class Settings {
    constructor() {
        this.initialize(this)
        this.setCategoryDescription("General", 
`
&6&l基础设置

&f这里是一些基础设置
`
        )
        this.setCategoryDescription("Dungeon", 
`
&d&l地牢的一些小功能
`
        )
        this.setCategoryDescription("Kuudra", 
`
&4&lKuudra 相关功能
`
        )
        this.setCategoryDescription("Auto Requeue", 
`
&b&lDungeon 和 Kuudra 自动重开
&e在一局结束后但还未离开房间时使用指令
&e/instancerequeue 可以快速进入下一局
&e此页面的功能就是在一局结束时自动执行此操作
`
        )
        this.setCategoryDescription("Slayer", 
`
&5&lSlayer 相关功能
`
        )
        this.setCategoryDescription("Mining", 
`
&b&l挖矿相关功能
`
        )
        this.setCategoryDescription("Fishing", 
`
&b&l钓鱼相关功能
`
        )
        this.setCategoryDescription("Garden", 
`
&e&l花园和农业相关功能
`
        )
        this.setCategoryDescription("Withercloak", 
`
&b&lwither cloak 和 Aligned

&6的持续时间和冷却时间
`
        )
        this.setCategoryDescription("Quick Command", 
`
&a&l快捷指令

&5当你按下按键时
&5根据不同的情况执行不同的指令
&4执行顺序与本页面排序相同
&6按键在游戏设置里更改
`
        )
        this.setCategoryDescription("AutoIS", 
`
&5Auto /island - 挂机利器
&5自动返回skyblock的个人岛屿!
&b可以用 &a/${this.modulecmd} autois &b快捷开关
&4并非所有情况都能自动返回岛屿~
`
        )
        this.setCategoryDescription("Misc", 
`
&b&l这里是一些无分类的功能
`
        )


        this.addDependency("星标怪框的颜色","box ✯ mobs")
        this.addDependency("星标Fels框的颜色","box ✯ mobs")
        this.addDependency("Fels框的颜色","box &m✯&r Fels")
        
        this.addDependency("光束颜色","kuudra Waypoints")
        
        this.addDependency("Zombie Slayer 信息显示","Slayer Boss信息显示")
        this.addDependency("Spider Slayer 信息显示","Slayer Boss信息显示")
        this.addDependency("Wolf Slayer 信息显示","Slayer Boss信息显示")
        this.addDependency("Enderman Slayer 信息显示","Slayer Boss信息显示")
        this.addDependency("Blaze Slayer 信息显示","Slayer Boss信息显示")
        this.addDependency("Vampire Slayer 信息显示","Slayer Boss信息显示")
        
        this.addDependency("指南针获取目标后在聊天栏显示的消息","水晶矿洞指南针点位计算")
        this.addDependency("点击此消息时执行的指令","水晶矿洞指南针点位计算")

    }

    @ButtonProperty({
        name: '属性高亮',
        description: '高亮显示带有一个或两个特定词条的物品',
        category: 'Misc',
        placeholder: '进入子设置页面',
    })
    OpenAttributeHighlightSetting() {
        AttributeHighlightSettings.openGUI();
    }

    @SelectorProperty({
        name: 'Default command',
        description: '设置只输入/bza时默认的选项',
        category: 'General',
        options: ['help (帮助)','设置页面(本页面)','获取计分板内容','自动接受下一个组队邀请','房间号检测,看是否来过','发送坐标到pc (指针所指位置)','发送坐标到pc (人物所在位置)','检查更新','查看历史更新日志'],
    })
    defaultcommand = 1;

    @TextProperty({
        name: "Module Command",
        description: "自定义一个指令来使用此module,下次重载时生效",
        category: "General",
        placeholder: 'bza',
        triggerActionOnInitialization: true
    })
    modulecmd = "bza";

    @SelectorProperty({
        name: '检查更新',
        description: '将会在每次module加载时尝试检测更新\n也可以用指令手动检测更新',
        category: 'General',
        options: ['关闭','有更新时提醒我','有更新时帮我自动更新'],
    })
    AutoCheckUpdate = 1;

    //Hud Mover
    @ButtonProperty({
        name: '移动此module的Hud位置',
        description: '拖拽移动位置,按住左键时滚动滚轮调节大小',
        category: 'General',
        placeholder: '点我!',
    })
    OpenGuiMover() {
        ChatLib.command("babyzombieaddons guimover",true);
    }

    @ButtonProperty({
        name: '&4重置&r此module的Hud位置',
        description: '重置此module的所有hud位置\n&c注意:此操作不可逆,请小心操作\n&c点击后需前往聊天栏进行二次确认',
        category: 'General',
        placeholder: '§c别随便点我!',
    })
    ResetHudLocation() {
        new Message(
            "§6§l[BZA] §b您确定要重置所有hud的位置吗?\n" ,
            new TextComponent("§c确定").setClick("run_command","/babyzombieaddons resethudlocation") ,
            "     " , new TextComponent("§e取消").setHover("show_text","§e嗯,无视这条消息就算是取消了")
        ).chat();
        Client.currentGui.close();
    }

    //子设置页面
    @ButtonProperty({
        name: '事件功能',
        description: '如 队伍内自动转队长(!ptme) , warp , allinvite 或 快捷接组队邀请 等',
        category: 'Event',
        placeholder: '进入子设置页面',
    })
    OpenEventSetting() {
        eventSettings.openGUI();
    }
    
    @ButtonProperty({
        name: '部分小游戏功能',
        description: '如 幸运方块空岛战争的 防自杀 , 快捷接恶魔契约 等',
        category: 'Mini Games',
        placeholder: '进入子设置页面',
    })
    OpenMiniGamesSetting() {
        MiniGamesSettings.openGUI();
    }

    @ButtonProperty({
        name: '快捷指令',
        description: '当你按下特定按键时根据不同的情况执行不同的指令',
        category: 'Quick Command',
        placeholder: '进入子设置页面',
    })
    OpenQCSetting() {
        QuickCommandSettings.openGUI();
    }
    
    //Misc
    @SliderProperty({
        name: "(不一定)更好的第二人称切换",
        description: "视角切换时跳过第二人称,但长按一段时间后切到第二人称\n调到 0 关闭此功能,数值为tick, 20ticks是一秒",
        min: 0,
        max: 100,
        category: 'Misc',
    })
    TogglePerspective = 0;

    @SelectorProperty({
        name: '没有雾',
        description: '去除迷雾和一些滤镜效果',
        category: 'Misc',
        options: ['关','开','仅Skyblock'],
    })
    noFog = 0;

    @SelectorProperty({
        name: '装饰性粒子特效',
        description: '仅自己可见 仅在不移动时显示',
        category: 'Misc',
        options: ['关闭','火焰翅膀','红石翅膀','符文翅膀','烟雾翅膀','紫色翅膀'],
    })
    wings = 0;

    @SwitchProperty({
        name: 'Double "lobby" outside the Skyblock',
        description: '若开启了/lobby双重确认,在skyblock外面使用/lobby时自动使用两次',
        category: 'Misc',
    })
    Doublelobby = false;

    @SwitchProperty({
        name: 'Automatically change language when join skyblock',
        description: '进入skyblock时如果不是英文就自动切成英文',
        category: 'Misc',
    })
    autolanginsb = false;

    @SwitchProperty({
        name: 'There are blocks in the way!',
        description: '开了以后就把这个消息删了',
        category: 'Misc',
    })
    BlocksInTheWay = false;

    @SwitchProperty({
        name: '9点报时',
        description: 'skyblock晚上九点报时',
        category: 'Misc',
    })
    time9pm = false;

    @SwitchProperty({
        name: 'mute terror and crimson armor',
        description: '在地狱套装层数叠满以后把活塞声音给取消了',
        category: 'Misc',
    })
    mutecrimsonarmor = false;
    
    @SwitchProperty({
        name: '在skyblock内取消放置末影珍珠',
        description: '额,放置珍珠...然后又没有放置权限\n额,是谁说高版本就修复了的?1.21.1白端实测不行\n&c使用风险自负,因为此功能取消了部分操作从而做到了一些别人做不到的操作',
        category: 'Misc',
    })
    CancelPlaceEnderPearl = false;

    @SwitchProperty({
        name: '在物品上显示词条',
        description: '在物品上面一点点的地方显示\n很小的一点词条显示\n&b使用指令 /babyzombieaddons attname 修改',
        category: 'Misc',
    })
    ShowAttUnderItem = false;

    @SwitchProperty({
        name: '(不一定)更好的蛋糕信息显示',
        description: '取消原有蛋糕提示并改成可以显示你刚才吃了哪些蛋糕的信息',
        category: 'Misc',
    })
    CakeMessage = false;

    @SwitchProperty({
        name: '显示箭袋箭矢数量',
        description: "显示箭袋里箭矢的数量\n通过快捷栏和买箭消息获取箭袋箭矢数量\n数量不准时可以打开箭袋校准",
        category: 'Misc',
    })
    ShowArrows = false;
    
    @SwitchProperty({
        name: 'Kill Combo',
        description: '把Kill Combo从聊天栏移到一个自定义ui里面',
        category: 'Misc',
    })
    KillCombo = false;

    @SwitchProperty({
        name: '允许你在使用getfromsacks(gfs)指令时自动补全物品名称',
        description: '补全的物品名称时不区分大小写,只会补全出你有的sack能装的物品\n如果补全不出你想要的物品,可以打开一次对应sack然后再试',
        category: 'Misc',
    })
    GetfromsacksTabCompletion = false;

    @SelectorProperty({
        name: '试着获取并显示物品时间戳',
        description: '在skyblock内有uuid的物品一般都标有生产日期',
        category: 'Misc',
        options: ['关闭', '修改物品数据', '修改显示的描述 (推荐)'],
    })
    ItemTimeStamp = 0;

    @SelectorProperty({
        name: '试着获取并显示物品Skyblock uuid',
        description: 'skyblock uuid 是物品在Skyblock里的唯一标识符,可用于追溯物品',
        category: 'Misc',
        options: ['关闭', '修改物品数据', '修改显示的描述 (推荐)'],
    })
    ItemSkyblockUUID = 0;

    @SelectorProperty({
        name: '物品时间戳显示时间的时区',
        description: '改这个会改时间戳显示方式',
        category: 'Misc',
        options: ['默认本地时间显示方式', 'UTC', '本地(纯数字)'],
    })
    ItemTimeZone = 2;
    
    @SwitchProperty({
        name: '个人压缩机和删除器预览',
        description: '指上去的时候显示 压缩机/删除器 开关状态和里面的物品, 显示物品图标需要有neu的repo',
        category: 'Misc',
    })
    PersonalCompact = false;
    
    @SelectorProperty({
        name: '凋零护盾计时',
        description: '凋零盾触发后在屏幕上显示盾的冷却计时器',
        category: 'Misc',
        options: ['关闭', '仅在冷却时', '冷却好后三秒内', '始终'],
    })
    WitherShield = 0;

    @SwitchProperty({
        name: '隐藏手持神剑的人附近五格的大型爆炸粒子',
        description: '基本上能隐藏掉神剑的爆炸粒子了,除非真的飞的很快,可能会一并隐藏些其他的',
        category: 'Misc',
    })
    hideHyperion = false;

    @SliderProperty({
        name: "调节Wither Impart的爆炸音量",
        description: "其实是把原来的声音取消了重新进行了播放",
        min: 0,
        max: 10,
        category: 'Misc',
    })
    WitherImpartVol = 10;

    @SliderProperty({
        name: "隐藏距离你很近的玩家",
        description: "只是看不见,不代表你就点不到了. 只在skyblock里生效,无法隐藏血量20的玩家",
        min: 0,
        max: 10,
        category: 'Misc',
    })
    hideNearPlayer = 0;

    @SwitchProperty({
        name: '在Barbarian Duke X 场地标一下Duke X位置',
        description: '方便从下往上打',
        category: 'Misc',
    })
    dukeX = false;

    @SelectorProperty({
        name: '取消苦力怕的隐身',
        description: '这样刷鬼刷苦力怕会舒服些',
        category: 'Misc',
        options: ["关闭", "仅矮人矿洞下面的鬼", "包括深层矿洞的苦力怕"]
    })
    creeper = 0;

    @SwitchProperty({
        name: 'send Vanquisher to party chat',
        description: '在下面自定义要发送的内容',
        category: 'Misc',
    })
    Vanquisher = false;

    @TextProperty({
        name: '出 Vanquisher 时发送的内容',
        description: '使用 %x% %y% %z% 代替坐标, %location% 代替所在地区, %server% 为服务器号 , %random% 会被替换为随机8位字符',
        category: 'Misc',
    })
    VanquisherMessage = "/pc x: %x%, y: %y%, z: %z%, Vanquisher , at %location% , Server: %server%";

    @SelectorProperty({
        name: 'BZ 创建出售订单时从sacks中提取物品',
        description: '这样就可以不用手动从菜单中进入bags里的sack of sacks中寻找sack然后拿东西了\n会尝试直接拿2304个,你包肯定放不下,所以是能拿多少拿多少出来\n&c点击是左键点击,但是也不能保证完全安全!!!',
        category: 'Misc',
        options: ['关闭', '仅取出物品', '取出物品后点击一次'],
    })
    bzGetfromsacks = 0;

    @SwitchProperty({
        name: '挖水果助手',
        description: '帮你记录挖过的水果和铲子给你的提示',
        category: 'Misc',
    })
    FruitDiggingHelper = false;

    @SwitchProperty({
        name: '告示牌内 剪贴 复制 粘贴 清除',
        description: '在告示牌编辑页面允许用 Ctrl + X / Ctrl + C / Ctrl + V 以及使用 Ctrl + delete 清除整行',
        category: 'Misc',
    })
    betterSignEdit = false;

    @SwitchProperty({
        name: 'auction快速上架',
        description: '上架过一次以后十分钟内上架相同物品可以帮你快速选择选项,填时间和价格\n若装有neu且能通过neu获取该物品价格则会在首次上架此物品时填入\n&c上架前请先确认价格无误\n价格和时间的快速填入不会对带词条物品生效',
        category: 'Misc',
    })
    quickAuction = false;

    @SwitchProperty({
        name: '修改染色防具的skyblockID',
        description: '这样材质包就不会对这些防具生效 额,也许会影响一些mod的部分功能',
        category: 'Misc',
    })
    dyedArmor = false;

    @SelectorProperty({
        name: '显示sack内物品的数量',
        description: '开启后进入sack页面选择要显示的物品\n需要开启hypixel的sack物品数量变动消息才能获取数量\n若数量不准可以尝试打开一次对应sack页面进行校准',
        category: 'Misc',
        options: ['关闭', '开启', '顺带隐藏聊天栏的sack消息'],
    })
    showSackItems = 0;

    @SelectorProperty({
        name: '定时清除无效实体',
        description: '在Skyblock内 每半分钟清除一次 已经死亡的和坐标无效的玩家实体 和 全套凋零套旁边的小凋零 和 什么都没有的隐身盔甲架\n其实不太推荐清盔甲架,因为有些盔甲架可能是有用的',
        category: 'Misc',
        options: ['关闭', '仅清除无效玩家', '仅清除凋零套旁边的小凋零', '仅清除隐身无名无物品的盔甲架', '清除无效玩家实体和小凋零', '清除无效玩家实体和无名盔甲架', '清除小凋零和无名盔甲架', '清除所有无效实体'],
    })
    clearEntity = 0;

    //Abiphone
    @SwitchProperty({
        name: '我都给你打电话了肯定是要接啊',
        description: "&bAccept the trapper's task to hunt the animal?",
        category: 'Misc',
        subcategory: 'Abiphone',
    })
    trapper = false;

    @SwitchProperty({
        name: '自动接听来电',
        description: "自动接听abiphone的来电",
        category: 'Misc',
        subcategory: 'Abiphone',
    })
    AutoAnswer = false;

    //flare timer
    @SwitchProperty({
        name: 'Flare timer',
        description: '烟花计时',
        category: 'Misc',
        subcategory: 'FlareTimer',
    })
    Flaretimer = false;

    @SwitchProperty({
        name: '在flare下方显示',
        description: '在烟花下方显示剩余时间',
        category: 'Misc',
        subcategory: 'FlareTimer',
    })
    ShowOnFlare = false;

    @ColorProperty({
        name: '时间文本的颜色',
        description: '写在烟花下面的时间的颜色',
        category: 'Misc',
        subcategory: 'FlareTimer',
    })
    flarecolor = new java.awt.Color(0x3eebe0,false);

    //slayer
    @SwitchProperty({
        name: '没接任务提醒',
        description: '任务失败后如果没重新接就刷怪时提醒一下 (需要武器有Champion附魔)',
        category: 'Slayer',
    })
    noslayerquest = false;

    @SelectorProperty({
        name: '小熊软糖计时器',
        description: '显示小熊软糖剩余时间,在最后五分钟、两分钟、一分钟和结束时会有一次提醒',
        category: 'Slayer',
        options: ['关闭', '仅在烈焰人洞显示', '除了地牢都显示'],
    })
    ReheatedGummyPolarBear = 0;
    
    @SwitchProperty({
        name: '显示Rift城堡里没拆的血柱',
        description: '根据计分板判断,不会显示已经拆掉的',
        category: 'Slayer',
    })
    ShowEffigies = false;
    
    @SwitchProperty({
        name: '标记血量低于20%的吸血鬼BOSS',
        description: '当出现这个(紫色)标记的时候,代表可以用 §9Steak Stake §7斩杀boss了',
        category: 'Slayer',
    })
    BoxLowHPBloodfiend = false;

    @SelectorProperty({
        name: '往你的slayer boss上套一个框',
        description: '大概率没有完全套进去,甚至有些时候会套到离得很近的怪上,但是基本能分辨就行啦',
        category: 'Slayer',
        subcategory: 'box',
        options: ['关闭', '正常框', '不正常框', '不正常框带光柱'],
    })
    boxslayerboss = 0;

    @ColorProperty({
        name: 'slayer boss身上的框的颜色',
        description: '就是上面那个框的颜色啊~',
        category: 'Slayer',
        subcategory: 'box',
    })
    boxbosscolor = new java.awt.Color(1, 0, 0, 1);

    @SelectorProperty({
        name: 'Ragnarock Axe 计时',
        description: '在一个ui内显示Ragnarock Axe相关信息',
        category: 'Slayer',
        options: ['关闭', '数字', '进度条'],
    })
    RagnarockAxe = 0;

    @SwitchProperty({
        name: 'Reaper 防具计时',
        description: '显示持续时间和冷却时间',
        category: 'Slayer',
    })
    ReaperArmor = false;

    @SelectorProperty({
        name: '末地石剑计时和防重复使用',
        description: '显示末地石剑持续时间和减伤百分比\n也可以防止在持续时间内再次使用',
        category: 'Slayer',
        options: ['关闭', '仅计时器', '仅防重复使用', '同时启用'],
    })
    EndStoneSword = 0;

    @SwitchProperty({
        name: '猪人剑冷却计时',
        description: '猪人剑触发后在屏幕上显示计时器\n&b在Rift内显示Holy Ice计时',
        category: 'Slayer',
        subcategory: 'pigman sword',
    })
    pigmansword = false;

    @SwitchProperty({
        name: 'Slayer Boss信息显示',
        description: '其实很多都在boss头顶',
        category: 'Slayer',
        subcategory: 'Slayer Boss Info',
    })
    SlayerBossInfo = false;

    @SelectorProperty({
        name: 'Zombie Slayer 信息显示',
        description: '目前也就看个血条,BOSS状态也没人关注',
        category: 'Slayer',
        subcategory: 'Slayer Boss Info',
        options: ['关闭', '仅血条', '血条和状态'],
    })
    ZombieSlayerInfo = 2;
    
    @SelectorProperty({
        name: 'Spider Slayer 信息显示',
        description: '目前也就看个血条',
        category: 'Slayer',
        subcategory: 'Slayer Boss Info',
        options: ['关闭', '仅血条'],
    })
    SpiderSlayerInfo = 1;

    @SelectorProperty({
        name: 'Wolf Slayer 信息显示',
        description: '目前也就看个血条,BOSS状态也没人关注',
        category: 'Slayer',
        subcategory: 'Slayer Boss Info',
        options: ['关闭', '仅血条', '血条和状态'],
    })
    WolfSlayerInfo = 2;

    @SelectorProperty({
        name: 'Enderman Slayer 信息显示',
        description: '血条,盾量,激光和信标计时',
        category: 'Slayer',
        subcategory: 'Slayer Boss Info',
        options: ['关闭', '仅血条', '血条和状态'],
    })
    EndermanSlayerInfo = 2;
    
    @SelectorProperty({
        name: 'Blaze Slayer 信息显示',
        description: '目前也就看个血条和现在用什么刀',
        category: 'Slayer',
        subcategory: 'Slayer Boss Info',
        options: ['关闭', '仅血条', '血条和状态', '血条 状态 和 Repeat'],
    })
    BlazeSlayerInfo = 2;

    @SelectorProperty({
        name: 'Vampire Slayer 信息显示',
        description: '血条和一些技能计时\n其实就写在boss头上',
        category: 'Slayer',
        subcategory: 'Slayer Boss Info',
        options: ['关闭', '仅血条', '血条和状态'],
    })
    VampireSlayerInfo = 2;

    //kuudra
    @SwitchProperty({
        name: 'kuudra welcome title',
        description: '进kuudra时给个title提示',
        category: 'Kuudra',
    })
    kuudrawelcometitle = false;

    @SelectorProperty({
        name: '自动从sack补充末影珍珠',
        description: '在kuudra/地牢开始时自动从sack中取出末影珍珠至16颗\n或在skyblock内使用珍珠且手里少于4颗时从sack中取出末影珍珠至16颗\n需要sack中存有末影珍珠',
        category: 'Kuudra',
        options: ['关闭', '进入kuudra/地牢时', '手里珍珠快用完时', '前两种都触发'],
    })
    RefillEnderPearl = 0;

    @SwitchProperty({
        name: 'heavy pearls 提示',
        description: '每天进skyblock都能给你一个摘珍珠提醒',
        category: 'Kuudra',
    })
    heavypearls = false;

    @SwitchProperty({
        name: 'kuudra phase time',
        description: '记录并显示kuudra每阶段用时',
        category: 'Kuudra',
    })
    kuudraPhaseTime = false;

    @SelectorProperty({
        name: '显示kuudra实际血量',
        description: '嗯,就是那个大型岩浆史莱姆本体的血量',
        category: 'Kuudra',
        options: ['关闭', 'hud显示', 'BossBar显示'],
    })
    ShowKuudraHP = 0;

    @SwitchProperty({
        name: 'Dropship warning',
        description: 'Dropship即将投弹时进行提醒',
        category: 'Kuudra',
    })
    Dropship = false;

    @SwitchProperty({
        name: 'Wandering Blazes Warning',
        description: '只在p2(弩炮建造阶段)提示',
        category: 'Kuudra',
    })
    WanderingBlazes = false;

    @SwitchProperty({
        name: 'Kuudra stun timer',
        description: 'kuudra开始旋转后给个计时器',
        category: 'Kuudra',
    })
    stun = false;

    @SwitchProperty({
        name: 'kuudra Waypoints',
        description: '在箱子和没建完的材料上加个光束',
        category: 'Kuudra',
    })
    KuudraWaypoints = false;

    @ColorProperty({
        name: "光束颜色",
        description: "修改上面那个光束的颜色",
        category: "Kuudra",
    })
    kuudraWaypointsColor = new java.awt.Color(1, 0, 0, 1);

    @SelectorProperty({
        name: '标记 Kuudra',
        description: '用一些方法告诉你kuudra在哪\n或许会有些帮助',
        category: 'Kuudra',
        options: ['关闭', '整个框上去','p4的时候来个小图标指示','都启用'],
    })
    ShowWhereKuudra = 0;

    @SwitchProperty({
        name: '末地石剑效果提示',
        description: '在p4用末地石剑的时候如果附近5格有队友就在队伍聊天发一句',
        category: 'Kuudra',
    })
    ExtremeFocus = false;

    @SwitchProperty({
        name: "Energy Charge 弩炮充能进度",
        description: "不在弩炮附近时可能无法检测弩炮的燃料清空",
        category: 'Kuudra',
        subcategory: 'Fuel',
    })
    Fuel = false;

    @SwitchProperty({
        name: "Show Title",
        description: "用title提示弩炮充能进度",
        category: 'Kuudra',
        subcategory: 'Fuel',
    })
    Fueltitle = false;

    @SwitchProperty({
        name: 'kuudra stun 进度',
        description: '用一个ui显示kuudra的stun进度百分比',
        category: 'Kuudra',
        subcategory: 'stun',
    })
    stuntoggle = false;

    @SwitchProperty({
        name: '不买Perk Shop中的部分物品',
        description: '&4开启此功能将会在特定环境下取消用户的操作',
        category: 'Kuudra',
        subcategory: 'Perk Shop',
    })
    PerkShopB = false;

    @TextProperty({
        name: '不买的Perk Shop中的物品',
        description: '使用物品完整名字,用 "," 分隔',
        category: 'Kuudra',
        subcategory: 'Perk Shop',
    })
    PerkShopBL = "Elle's Pickaxe,Elle's Lava Rod,Auto Revive,Support Route,Mining Frenzy I";

    //Attribute Price
    @SwitchProperty({
        name: 'kuudra箱子物品估价',
        description: '在kuudra奖励箱页面显示箱子里两个带词条物品的价格\n也会在其他地方指着带词条物品是显示价格\n此价格仅供参考,数据可能并非实时',
        category: 'Kuudra',
        subcategory: 'Attribute Price',
    })
    AttributesPrice = false;

    @SelectorProperty({
        name: 'ah数据查询',
        description: '若选择 仅没有价格数据可用时 ,则后续需要使用指令/bza ap update手动请求刷新\n若选择 仅手动使用指令时 ,则在没有价格数据时不会自动获取,想要使用此功能必须先手动获取',
        category: 'Kuudra',
        subcategory: 'Attribute Price',
        options: ['仅没有价格数据可用时', '仅手动使用指令刷新时','时间到了后自动获取'],
    })
    AuctionsRequest = 1;

    @SelectorProperty({
        name: '获取ah数据时是否提示信息',
        description: '在聊天栏显示目前ah获取的进度',
        category: 'Kuudra',
        subcategory: 'Attribute Price',
        options: ['不显示', '仅手动使用指令时','每次都显示'],
    })
    AuctionsRequestNotification = 1;

    @SliderProperty({
        name: "数据缓存的时间(分钟)",
        description: "就当是获取到的ah数据的保质期\n时间过了再要用的时候就重新获取一下",
        min: 2,
        max: 60,
        category: 'Kuudra',
        subcategory: 'Attribute Price',
    })
    AuctionsRequestTime = 30;

    @SliderProperty({
        name: "每种物品显示的数量",
        description: "当使用指令查询对应词条价格时显示的数量",
        min: 1,
        max: 30,
        category: 'Kuudra',
        subcategory: 'Attribute Price',
    })
    ShowAttributesPrice = 5;

    //wither cloak
    @SwitchProperty({
        name: 'Wither cloak timer',
        description: '盾刀的持续时间和冷却计时\n和 Soulward的持续时间和冷却时间',
        category: 'Withercloak',
        subcategory: 'Withercloak',
    })
    WitherCloakTimer = false;

    @SwitchProperty({
        name: 'Aligned Timer',
        description: "Gyrokinetic Wand 's Cells Alignment",
        category: 'Withercloak',
        subcategory: 'Aligned',
    })
    AlignedTimer = false;

    @SwitchProperty({
        name: 'Who aligned you',
        description: "显示给你Aligned buff的人",
        category: 'Withercloak',
        subcategory: 'Aligned',
    })
    Whoalignedyou = false;

    @SwitchProperty({
        name: 'Gravity Storm Cooldown',
        description: "聚怪冷却计时",
        category: 'Withercloak',
        subcategory: 'Aligned',
    })
    GravityStormCooldown = false;

    //Mining
    @SwitchProperty({
        name: '拿完水晶就回晶核',
        description: '嗯,那肯定要有卷轴啦~',
        category: 'Mining',
    })
    nucleus = false;

    @SwitchProperty({
        name: '跑晶核交物品时从sack中取',
        description: '会在需要的时候从sack中取丛林钥匙,机器人零件和哥布林蛋',
        category: 'Mining',
    })
    CHgetfromsacks = false;

    @SwitchProperty({
        name: '挖矿技能释放和就绪提示',
        description: '在矮人矿洞和水晶矿洞技能用了或好了给个提醒',
        category: 'Mining',
    })
    MiningAbilit = false;

    @SelectorProperty({
        name: '在水晶矿洞内标记你附近箱子',
        description: '标记你周围半径16格内的所有箱子,每秒扫一遍',
        category: 'Mining',
        options: ['关闭', '正常标记', '不正常标记'],
    })
    BoxCHChest = 0;

    @SelectorProperty({
        name: 'Worm和Scatha冷却提示',
        description: '在屏幕上显示一个GUI来告诉你生成冷却\n嗯,这能让你更加合理的利用犰狳挖宠物~',
        category: 'Mining',
        options: ['关闭', '仅冷却时', '保持显示'],
    })
    Scatha = 0;

    @SelectorProperty({
        name: 'Armadillo Energy',
        description: '带着犰狳时显示犰狳体力,需要骑过一次获取现有和最大体力\n&8其实你骑的是一只隐身的僵尸...',
        category: 'Mining',
        options: ['关闭', '仅未满时', '保持显示'],
    })
    ArmadilloEnergy = 0;

    @SelectorProperty({
        name: 'Armadillo Full Energy',
        description: '犰狳满体力时给些提示信息',
        category: 'Mining',
        options: ['关闭', 'Title', '声音', 'Title和声音'],
    })
    ArmadilloFullEnergy = 0;

    @TextProperty({
        name: 'Armadillo Full Energy Title',
        description: '如果开了Title显示后在Title显示的文本',
        category: 'Mining',
    })
    ArmadilloFullEnergyTitle = "&eYour armadillo is full of energy!";

    @SwitchProperty({
        name: '手持钻机或宝石拳套时阻止手臂摇摆',
        description: '仅在skyblock内生效. 只会在本地阻止动画',
        category: 'Mining',
    })
    DrillSwing = false;

    @SliderProperty({
        name: "采矿左键锁定",
        description: "仅在矿洞生效. 调到0关闭\n长按左键指定秒后锁定左键,再次按下取消锁定\n&c使用风险自负",
        min: 0,
        max: 10,
        category: 'Mining',
    })
    MinesLeftLock = 0;

    @SelectorProperty({
        name: '矮人矿洞龙蛋寻找器',
        description: '标注并记录所有可能出现龙蛋的位置,在你过去或看向附近时移除\n或者帮你找',
        category: 'Mining',
        options: ['关闭','仅记录','帮我找'],
    })
    DarkMonolithFinder = 0;

    @SelectorProperty({
        name: '挖粉部分音效修改',
        description: '在水晶矿洞破坏方块后五秒内启用',
        category: 'Mining',
        options: ['关闭','移除经验球声音','并修改箱子声音'],
    })
    PowderMinerSoundChange = 0;

    @SwitchProperty({
        name: '家中防爆',
        description: '防止在个人岛屿使用爆炸镐技能',
        category: 'Mining',
    })
    NoPickobulusOnIsland = false;

    @SwitchProperty({
        name: '冰川矿道任务宝石坐标点',
        description: '在冰川矿道内显示当前任务所需的宝石点位',
        category: 'Mining',
        subcategory: 'Glacite Tunnels',
    })
    GlaciteTunnelsWaypoints = false;

    @SwitchProperty({
        name: '冰川矿道大冰川坐标点',
        description: '标记大块冰川和对应飞镐子的位置,每个点位都能炸180+的冰川',
        category: 'Mining',
        subcategory: 'Glacite Tunnels',
    })
    GreatGlaciteWaypoints = false;

    @SwitchProperty({
        name: '冰川矿井坐标点',
        description: '在矿井内显示冰冻尸体和出口位置',
        category: 'Mining',
        subcategory: 'Glacite Tunnels',
    })
    GlaciteMineshaftWaypoints = false;

    @SelectorProperty({
        name: '冰川矿井提醒和传送',
        description: '进冰川矿井时自动携带队友\n选择更下面的选项也会启用上面几项',
        category: 'Mining',
        subcategory: 'Glacite Tunnels',
        options: ['关闭', '仅title和声音提醒', '进矿井后队伍聊天发送 "!ptme"', '你在冰川矿道时队内其他人 "!ptme" 后把队长给他', '进矿井后或在矿井内获取小队队长后p warp'],
    })
    GlaciteMineshaftWarp = 0;

    @SwitchProperty({
        name: '水晶矿洞指南针点位计算',
        description: '计算方法来自NEU并进行过改动,所以如果觉得不好用,可以直接下载并开始使用NEU,那才是真完整版',
        category: 'Mining',
        subcategory: 'Wishing Compass',
    })
    WishingCompassSolver = false;

    @TextProperty({
        name: '指南针获取目标后在聊天栏显示的消息',
        description: '用 %name% 代替结构名(不一定准) %x% %y% %z% 代替坐标',
        category: 'Mining',
        subcategory: 'Wishing Compass',
    })
    WishingCompassText = "&a[WishingCompass] %name%&r&f: x: %x%, y: %y%, z: %z%";

    @TextProperty({
        name: '点击此消息时执行的指令',
        description: '用 %name% 代替结构名(不一定准) %x% %y% %z% 代替坐标\n字符串最前面使用双斜杠则会先执行一次指令(客户端侧) 消息为空也会执行',
        category: 'Mining',
        subcategory: 'Wishing Compass',
    })
    WishingCompassCMD = "//babyzombieaddons addwaypoint %name% %x% %y% %z% 0";

    //Fishing
    @SwitchProperty({
        name: '隐藏别人的金鱼',
        description: '在地狱钓鱼有些时候可能会一直右键没反应,这可能是因为旁边人的金鱼挡在你前面了.这个时候如果开了这个功能就可以左键一下让这条金鱼在你这里消失,然后就可以继续钓鱼了',
        category: 'Fishing',
    })
    KillInvisibleGoldenFish = false

    @SwitchProperty({
        name: '显示冬岛龙的血量',
        description: '会改变龙的名称,并直接显示在boss条上',
        category: 'Fishing',
    })
    ShowReindrakeHP = false

    @ButtonProperty({
        name: '传奇海怪提醒',
        description: '钓上传奇海怪时可以显示Title,声音提示和发送消息到队伍聊天,使用时建议关闭 SBA 的 传奇海怪警告',
        category: 'Fishing',
        placeholder: '进入子设置页面',
    })
    OpenFishingSetting() {
        legendarySeaCreatureSettings.openGUI();
    }

    @SwitchProperty({
        name: '手持鱼竿时将火山里的蒸汽高度压低',
        description: '就不会那么挡视野了',
        category: 'Fishing',
        subcategory: 'Trophy Fish',
    })
    volcanoSteam = false;

    @SwitchProperty({
        name: '在地狱抛竿20秒内阻止收杆',
        description: '也就钓Slugfish的时候用了\n有条件推荐带个slug宠物,能减少所需时间',
        category: 'Fishing',
        subcategory: 'Trophy Fish',
    })
    hookLocked = false

    //Garden
    @SwitchProperty({
        name: '显示花园虫子的位置',
        description: '会在虫子上标上信标光柱,只在有虫子的时候启用\n虫子只有你到对应地皮后才显示',
        category: 'Garden',
    })
    ShowPests = false;

    @SwitchProperty({
        name: '花园破坏方块时取消经验球获取的声音',
        description: '可以减少一些 叮叮叮叮叮叮叮叮叮叮叮叮叮叮叮叮叮叮叮叮叮',
        category: 'Garden',
    })
    GardenUndingable = false;

    @SliderProperty({
        name: "左键锁定",
        description: "仅在花园生效. 调到0关闭\n长按左键指定秒后锁定左键,再次按下取消锁定\n&c使用风险自负",
        min: 0,
        max: 10,
        category: 'Garden',
    })
    GardenLeftLock = 0;

    @SwitchProperty({
        name: '右键点击告示牌可帮助调整角度',
        description: `在花园手持斧头或锄头时右键点击告示牌即可从告示牌中获取偏航和俯仰角度并对准.\n告示牌上需同时标有两个角度并用 "/" 分隔\n例:   180 / -58.5\n若穿着Rancher's Boots可从告示牌中获取速度并调整.\n告示牌中需以 "速度" "Speed" 或 "✦" 开头标注速度\n例:   速度: 155  |  Speed 250  |  ✦ 400`,
        category: 'Garden',
    })
    AutoRotate = false;

    //auto is
    @SwitchProperty({
        name: 'Auto island - 挂机利器',
        description: '自动返回skyblock的指定岛屿!"',
        category: 'AutoIS',
    })
    autois = false;

    @TextProperty({
        name: "需要Auto island的玩家名",
        description: "多开时有用,留空则全都会Auto is",
        category: "AutoIS"
    })
    autoisname = "";

    @SelectorProperty({
        name: '被系统踢出后',
        description: "当出现\nYou were kicked while joining that server!\n或\nOops! You are not on SkyBlock so we couldn't warp you!\n且未开启AutoIS时",
        category: "AutoIS",
        options: ['什么都不执行', '只执行一个/lobby','/lobby 五秒后再 /play skyblock'],
    })
    autobacktoskyblock = 1;

    @SelectorProperty({
        name: '返回skyblock后的目的地',
        description: '个人岛屿一般挂小人和bits,不扣神药\n花园挂机可以让作物升长,但是会消耗神药',
        category: "AutoIS",
        options: ['个人岛屿', '花园'],
    })
    autoisto = 0;

    @SliderProperty({
        name: "Auto /is 延迟",
        description: "世界加载后过多久尝试/is",
        min: 1,
        max: 180,
        category: 'AutoIS',
    })
    autoisdelay = 10;

    //dungeon
    @SwitchProperty({
        name: 'Dungeon welcome title',
        description: '进地牢时给个title提示',
        category: 'Dungeon',
    })
    dungeonwelcometitle = false;

    @SwitchProperty({
        name: 'Blood ready message',
        description: '血房怪出完以后在pc发一句 "Blood room ready!"',
        category: 'Dungeon',
    })
    bloodready = false;

    @SwitchProperty({
        name: '标记凋零钥匙和血房钥匙',
        description: '在用来开下一个门的那个钥匙上面标上: KEY',
        category: 'Dungeon',
    })
    WitherKey = false;

    @SelectorProperty({
        name: '在地牢4层boss房隐藏看台上的观众',
        description: '只是看不见,他们还是在那里的,但是看不见就不觉得他们烦了(好像还能提升点帧数)',
        category: 'Dungeon',
        options: ["关闭", "隐藏", "移除"],
    })
    HideCrowdInF4 = 0;

    @SwitchProperty({
        name: '在地牢里禁用Aligned',
        description: '开启后会在地牢里禁用 Gyrokinetic Wand 的右键技能,以防误触',
        category: 'Dungeon',
    })
    NoAlignedInDungeon = true;

    @SelectorProperty({
        name: 'Dungeon Daily',
        description: '在地牢结束时记录并显示每日地牢场次\n每天前五场地牢可获得额外经验加成',
        category: 'Dungeon',
        options: ["关闭", "仅前五场", "一直显示"],
    })
    DungeonDaily = 0;

    @SwitchProperty({
        name: '静音Storm死后的雷声',
        description: '在Storm死后10秒取消所有雷声',
        category: 'Dungeon',
    })
    MuteStorm = false;

    @SwitchProperty({
        name: '自动关闭箱子页面',
        description: '在地牢内右键普通箱子后0.5秒内自动关闭所有打开的Gui,以此达到打开秘密箱子后自动关闭的效果. \n§c使用风险自负',
        category: 'Dungeon',
    })
    AutoCloseChestGui = false;

    @SwitchProperty({
        name: 'box ✯ mobs',
        description: '在地牢内给所有✯开头❤结尾的盔甲架下面套个框',
        category: 'Dungeon',
        subcategory: 'Box Star and Fels',
    })
    boxstarmobs = false;

    @ColorProperty({
        name: "星标怪框的颜色",
        description: "不包含Fels",
        category: 'Dungeon',
        subcategory: 'Box Star and Fels',
    })
    boxstarmobsColor = new java.awt.Color(0, 1, 0, 1);

    @ColorProperty({
        name: "星标Fels框的颜色",
        description: "只是星标Fels",
        category: 'Dungeon',
        subcategory: 'Box Star and Fels',
    })
    boxstarfelsColor = new java.awt.Color(0xbe66f7,false);

    @SwitchProperty({
        name: 'box &m✯&r Fels',
        description: '在地牢内给所有不是星标怪的Fels套个框',
        category: 'Dungeon',
        subcategory: 'Box Star and Fels',
    })
    boxfels = false;

    @ColorProperty({
        name: "Fels框的颜色",
        description: "不包含Fels",
        category: 'Dungeon',
        subcategory: 'Box Star and Fels',
    })
    boxnostarfelsColor = new java.awt.Color(0.5, 0, 0.5, 1);

    @SliderProperty({
        name: "看看谁没准备,然后pc提醒一下",
        description: "↓ 开始地牢计时后过多久提醒, 设置为0即为关闭",
        min: 0,
        max: 30,
        category: 'Dungeon',
        subcategory: 'Dungeon Ready',
    })
    dungeonready = 0;

    @TextProperty({
        name: '在party chat发出去的消息',
        description: '用 %player% 代替具体的玩家名',
        category: 'Dungeon',
        subcategory: 'Dungeon Ready',
    })
    dungeonreadymessage = "%player% , ready";

    @SelectorProperty({
        name: 'Dupe Archer',
        description: '发现有人dupe archer的时候哔一下',
        category: 'Dungeon',
        subcategory: 'Dupe Archer Check',
        options: ['不去管他', '聊天栏提示一下', 'title提示一下','聊天栏和title都提示一下','title提示一下并直接发party chat!'],
    })
    dupearcher = 0;

    @TextProperty({
        name: '队伍内出现重复弓箭手时的提示信息',
        description: '如果上个选项设置了发party chat的话,这也是发的内容',
        category: 'Dungeon',
        subcategory: 'Dupe Archer Check',
    })
    dupearchertext = "We have 2 or more archer!";
    
    //Auto Requeue
    @SwitchProperty({
        name: '掉人时尝试p warp',
        description: '会在进入Kuudra或地牢后三秒左右检测,如果是队长且房间内人数小于队伍人数,则会尝试一次p warp',
        category: 'Auto Requeue',
    })
    InstanceWarp = false;

    @TextProperty({
        name: "当有人 nr 并自动取消时回复个什么",
        description: "留空就不发了 &4(手动取消请使用 /nr)",
        category: 'Auto Requeue',
    })
    AutoRequeueCancel = "ok";

    @TextProperty({
        name: "在队伍聊天内检测取消自动重开的关键词",
        description: "仅检测Party Chat 不区分大小写,其他的需要完全匹配\nDungeon/kuudra开始后开始检测",
        category: 'Auto Requeue',
    })
    AutoRequeueText = "n|nr|wait|stop|dt|don't|gtg|tyfr|tyfrs|gtg tyfr|gtg tyfrs|no key|别急|等会|等下|先别开";

    @SelectorProperty({
        name: 'Dungeon自动重开',
        description: '一把打完后直接开下一把',
        category: 'Auto Requeue',
        subcategory: 'Dungeon',
        options: ['关','仅战败时','仅战胜时','一把结束时']
    })
    AutoRequeueDungeon = 0;

    @TextProperty({
        name: '地牢准备开下一把时发的消息',
        description: '用 %delay% 代替时间',
        category: 'Auto Requeue',
        subcategory: 'Dungeon',
    })
    AutoRequeueDungeonText = "going in %delay%";

    @SliderProperty({
        name: "地牢开下一把的时间",
        description: "打完后多久进下一把",
        min: 0,
        max: 60,
        category: 'Auto Requeue',
        subcategory: 'Dungeon',
    })
    AutoRequeueDungeonDelay = 0;

    @SelectorProperty({
        name: 'Kuudra自动重开',
        description: '一把打完后直接开下一把',
        category: 'Auto Requeue',
        subcategory: 'Kuudra',
        options: ['关','仅战败时','仅战胜时','一把结束时']
    })
    AutoRequeueKuudra = 0;

    @TextProperty({
        name: 'Kuudra准备开下一把时发的消息',
        description: '用 %delay% 代替时间\n战败时为2,因为太快会吞神药',
        category: 'Auto Requeue',
        subcategory: 'Kuudra',
    })
    AutoRequeueKuudraText = "going in %delay%";

    @SliderProperty({
        name: "Kuudra开下一把的时间",
        description: "打完后多久进下一把",
        min: 0,
        max: 120,
        category: 'Auto Requeue',
        subcategory: 'Kuudra',
    })
    AutoRequeueKuudraDelay = 60;
}

export default new Settings    
